package com.tedu.api.list;

import org.junit.Test;

import javax.swing.*;
import java.util.ArrayList;
import java.util.Collection;

/**
 * 存放很多相同数据---数组  989个数据
 * int[] i=new int[989];  要求：1.定长 2.类型固定
 * 需求：存989个数据，而且数据不同
 *      当我们需求中，存在数量不确定，类型不确定---使用集合保存数据
 *
 * 集合：存放相同【不相同】的数据的容器，使用功能与数组类似，保存一组数据
 * 包位置：java.util
 * Collection【接口】  顶级集合  容器
 * 作用：所有集合的顶级接口，规定使用集合都具备的方法！
 *
 * Collection【接口】可以创建对象---多态创建顶级集合
 * Collection 引用=new ArrayList（）；  爷爷类=孙子类--继承关系---多态
 * List子接口【继承Collection接口】
 *     ArrayList实现类【继承List接口】
 * set【继承Collection接口】
 *
 */
public class CollectionAPI {
    @Test
    public void testCollection() {
        //创建顶级集合【容器】
        Collection c = new ArrayList();
        /**
         * add(Object a)方法  返回值：boolean
         * 作用：向当前集合添加元素，元素可以为任意，存入成功true，失败false
         */
        c.add("字符串");
        c.add(1);
        c.add(123.12);
        c.add(new JFrame());
        c.add(new Object());

        /**
         * remove(Object o)方法   返回值：void
         * 作用：删除集合中给定的元素，只会删除第一个元素
         * 需求：删除C集合中  元素为 1的内容
         */
        c.remove(1);
        System.out.println("删除后集合：" + c);

        /**
         * size()方法  返回值：int
         * 作用：获取集合中元素个数--数组存在length，获取数组长度
         */
        int size = c.size();
        System.out.println("集合元素个数：" + size);

        /**
         * clear()方法   返回值：void
         * 作用：清空集合
         * inEmpty（）方法  返回值：boolean
         * 作用：返回集合元素，如果有元素false，没元素提示ture
         *
         */
        c.clear();//清空集合
        //System.out.println(c);
        boolean b = c.isEmpty();
        //是不是空的：是空---没有元素提示true，反之
        System.out.println("集合中没有元素" + b);
    }
    /**
     * addAll(Collection c)   操作：并集
     * 作用：将给定集合中所有元素添加至当前集合中，添加成功true
     * 返回值：boolean
     */
    @Test
    public void testAddAll(){
        Collection c1=new ArrayList();
        c1.add("java");c1.add("net");c1.add("go");
        Collection c2=new ArrayList();
        c2.add("c");c2.add("java");c1.add("php");
        boolean b=c1.addAll(c2);
        System.out.println("集合并集结果:"+c1);
        System.out.println("并集是否成功："+b);
    }
    /**
     * contains()方法  返回值：boolean
     * 作用：判断当前集合是否包含给定元素，包含返回true
     * containsAll()方法 返回值：boolean
     * 作用：判断当前元素是否包含给定元素的所有元素
     *   当前集合：containsAll（给定集合）
     *   注意：判断所有集合元素一致，返回：true
     *        当前集合包含给定元素，元素存在，返回：true
     *        当前集合包含给定元素，元素不存在，返回：false
     *   总结：containsAll，个数不参考，存入顺序，元素数据是否一致
     */
    @Test
    public void testContains(){
        Collection c1=new ArrayList();
        c1.add("java");c1.add("net");c1.add("go");
        Collection c2=new ArrayList();
        c2.add("java");c2.add("net");c2.add("go");
        boolean b1=c1.containsAll(c2);
        System.out.println("c1是否包含c2："+b1);
        //判断集合中，是否存在java元素【数据】
        boolean b=c1.contains("java");
        System.out.println("判断c1中是否存在java元素："+b);
    }
    /**
     * removeAll()方法  返回：boolean
     * 作用：删除当前集合中与给定元素的共有元素,删除
     * 总结：顺序不参考，共有元素，存在即删除，保留当前集合
     */
    @Test
    public void testRemoveAll(){
        Collection c1=new ArrayList();
        c1.add("1");c1.add("2");c1.add("3");
        Collection c2=new ArrayList();
        c2.add("1");c2.add("2");c2.add("3");
        boolean b=c1.removeAll(c2);
        System.out.println("c1是否删除c2的元素"+b);//true
        System.out.println("c1交集的集合："+c1);//[]
    }

}
